package fr.afcepf.ai91.qualimetrie.data;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import fr.afcepf.ai91.qualimetrie.entity.Adresse;
import fr.afcepf.ai91.qualimetrie.util.UtilConnexionAi91;
/**
 * Implementation des fonctions d'acces aux donnees de la BDD 'qualimetrie' pour la table 'adresse'.
 * @author Stagiaire
 *
 */
public class DaoAdresseImpl implements IDaoAdresse{
/**
 * requete pour ajouter une adresse dans la BDD.
 */
    // String en final pour etre sur de ne pas concatener cette string
    private final String reqAjout = "INSERT INTO adresse (num, rue, cp, ville, pays)"
            + "VALUES (?,?,?,?,?)"; // reqAjout est requete parametree
    /**
     * Indice du num pour l'ajout d'une adresse.
     */
    private final int indiceNumAdresse = 1;
    /**
     * Indice de rue pour l'ajout d'une adresse.
     */
    private final int indiceRueAdresse = 2;
    /**
     * Indice du cp pour l'ajout d'une adresse.
     */
    private final int indiceCpAdresse = 3;
    /**
     * Indice de ville pour l'ajout d'une adresse.
     */
    private final int indiceVilleAdresse = 4;
    /**
     * Indice du pays pour l'ajout d'une adresse.
     */
    private final int indicePaysAdresse = 5;
    @Override
    public Adresse ajouter(Adresse paramAdr) {
        Connection cnx = UtilConnexionAi91.getConnection();
        try {
            PreparedStatement pstmt = cnx.prepareStatement(reqAjout, Statement.RETURN_GENERATED_KEYS);
            //pour faire la requete reqAjout puis retourner les cles generees par la requete
            pstmt.setString(indiceNumAdresse, paramAdr.getNumero());
            pstmt.setString(indiceRueAdresse, paramAdr.getRue());
            pstmt.setString(indiceCpAdresse, paramAdr.getCp());
            pstmt.setString(indiceVilleAdresse, paramAdr.getVille());
            pstmt.setString(indicePaysAdresse, paramAdr.getPays());
            
            int nbLigne = pstmt.executeUpdate();
            if(nbLigne == 1) {// pour recuperer l'id qui vient d'etre genere et l'affecter a paramAdr
                ResultSet rs = pstmt.getGeneratedKeys();
                if(rs.next()) {
                    paramAdr.setId(rs.getInt(1));
                }
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
          try {
            cnx.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        }
        return paramAdr;
    }

}
